.\"
.\" Standard preamble:
.\" ======================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R

.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  | will give a
.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
.\" to do unbreakable dashes and therefore won't be available.  \*(C` and
.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` `
.    ds C' '
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr
.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
.\" index entries marked with X<> in POD.  Of course, you'll have to process
.\" the output yourself in some meaningful fashion.
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
.    .
.    nr % 0
.    rr F
.\}
.\"
.\" For nroff, turn off justification.  Always turn off hyphenation; it
.\" makes way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.bd B 3
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ======================================================================
.\"
.IX Title "libsyminfo 3"
.TH libsyminfo 3 
.UC
.SH "NAME"
libsyminfo \- Library for accessing symbol information
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
Typically access to symbol information from a mach-o is done via the command line tool nm.  This data can be examined and processed to determine what a binary exports or imports.  With the advent of Symdex(A symbol index used by Mac OS X Build & Integration), there was desire to avoid constant invocations to a command line tool.  libsyminfo gives a object oriented approach written in C to allow clients to extract import and export information from a mach-o binary.   

.SH "API"
.IX Header "API"
Defined in libsyminfo.h.

.B NMList NMCreate(char *fileName)

Creates a NMList object(opaque struct), with import and export information.  This information is stored in opaque structs called NMSymbols.  The NMList also object holds information about the binaries subumbrellas and what libraries this binary is a subframework of, if that applicable.  If the binary is a library the short name is also stored in the NMList.

.B NMSymbols *NMGetImports(NMList nmList)

Access function for retrieving the imports from a NMList object.

.B NMSymbols *NMGetExports(NMList nmList)

Access function for retrieving the exports from a NMList object.

.B NMDependencies NMGetLibraryInfo(NMList nmList)

Access function for retrieving a NMDependencies object(opaque struct), which holds subframework and subumbrella information.

.B char *NMGetShortName(NMList nmList)

Access function for retrieving the short name(if it exists) from a NMList.  For example if the NMList was for /usr/lib/libSystem.B.dylib the short name would be libSystem.

.B char *NMGetSymbolName(NMSymbols symbol)

Access function to retrieve the symbol name from a NMSymbols opaque struct.

.B const char *NMGetSymbolArch(NMSymbols symbol);

Access function to retrieve the symbol's architecture from a NMSymbols opaque struct.

.B char *NMGetSymbolOrdinal(NMSymbols symbol)

Access function to retrieve the symbols library ordinal from a NMSymbols opaque struct.

.B unsigned int NMGetExportCount(NMList nmList)

Access function for number of exports in a NMList.

.B unsigned int NMGetImportCount(NMList nmList)

Access funcation for the number of imports in a NMList.

.B char **NMGetSubFrameworks(NMDependencies deps)

Access function for the SubFrameworks of a NMDependencies opaque struct.

.B char **NMGetSubUmbrellas(NMDependencies deps)

Access function for the SubUmbrellas of a NMDependencies opaque struct.

.B unsigned int NMGetSubUmbrellaCount(NMDependencies deps)

Access function for the number of SubUmbrellas from a NMDependencies opaque struct.

.B unsigned int NMGetSubFrameworkCount(NMDependencies deps)

Access function for the number of SubFrameworks from a NMDependencies opaque struct.

.B void NMFree(NMList nmList)

Function used to free the memory allocated by a NMList.

.B void NMFreeSymbols(NMSymbols symbol)

Function used to free the memory allocated by NMSymbols.

.B void NMFreeDependencies(NMDependencies deps)

Function used to free the memory allocated by NMDependencies.

.B NMSymbols NMCreateSymbols(char *name, char *arch,char *ordinal)

Function used to create NMSymbols.

.B NMDependencies NMCreateDependencies(char **subUmbrellas, char **subFrameworks, int nSubUmbrellas,int nSubFrameworks)

Function used to create NMDependencies.  

.SH "SEE ALSO"  
.IX Header "SEE ALSO"
nm(1)
